package com.localShare.load;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.support.v4.content.ContextCompat;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.HorizontalScrollView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;

import com.ipackage.ContentLoad;
import com.localShare.Common;
import com.localShare.Constant;
import com.localShare.adapter.MultiImageAdapter;
import com.localShare.R;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
import com.util.ExtendedViewPager;
import com.util.SharedPreferencesUtil;

import java.util.ArrayList;

/**
 * Created by 883564
 * on 2016/4/20.
 * 多图片加载实现类
 */
public class MultipleImageLoad implements ContentLoad{
    /**
     * 加载
     * @param activity 上下文
     * @param object 加载的目标对象
     * @param intent 待加载的数据
     * @return 数据的数量，图片的张数，uri数
     */
    @Override
    public int load(final Activity activity, Object object, Intent intent) {
        int size=0;
        //对象转换成对象数组
        Object[] objects=(Object[])object;
        //显示全图的ViewPager
        final ExtendedViewPager extendedViewPager=(ExtendedViewPager)objects[0];
        //缩略图父容器
        LinearLayout thumbImageContainer=(LinearLayout) objects[1];
        //水平滚动控件
        HorizontalScrollView horizontalScrollView=(HorizontalScrollView)objects[2];
        //Uri数组
        ArrayList<Uri> extras=intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
        if(null!=extras){
            //多图片适配器
            MultiImageAdapter multiImageAdapter=new MultiImageAdapter(extras);
            //ViewPager加载适配器
            extendedViewPager.setAdapter(multiImageAdapter);
            //ViewPager加载页面改变监听器
            extendedViewPager.addOnPageChangeListener(new MyOnPageChangeListener(thumbImageContainer,activity,horizontalScrollView));
            //缩略图容器初始化
            thumbImageContainerInit(thumbImageContainer,extras,activity,extendedViewPager);
            //数组大小
            size=extras.size();
            //拼接数组内容，进行存储
            StringBuilder multipleImageUri=new StringBuilder();
            //拼接数据，每条数据用‘，’分割
            for(int i=0;i<size;i++){
                Uri uri=extras.get(i);
                multipleImageUri.append(uri.toString());
                multipleImageUri.append(Constant.MULTIPLE_IMAGE_URI_SPLIT);
            }
            //删除最后一个分割符
            multipleImageUri.deleteCharAt(multipleImageUri.lastIndexOf(Constant.MULTIPLE_IMAGE_URI_SPLIT));
            //使用首选项工具类存储
            SharedPreferencesUtil sharedPreferencesUtil=new SharedPreferencesUtil();
            sharedPreferencesUtil.saveString(activity,Constant.PRIVATE_SHARED_PREFERENCE,Constant.MULTIPLE_IMAGE_URI,multipleImageUri.toString());
        }
        return size;
    }

    /**
     * 数据加载，从存储中取数据
     * @param activity 上下文
     * @param extendedViewPager 显示全图的ViewPager
     * @param thumbImageContainer 缩略图容器
     * @param uriString 数据
     * @param horizontalScrollView 水平滚动控件
     * @return 数据条数
     */
    public int load(Activity activity,ExtendedViewPager extendedViewPager,LinearLayout thumbImageContainer,String uriString,HorizontalScrollView horizontalScrollView){
        int size;
        if("".equals(uriString)){
            return 0;
        }
        //根据分隔符将数据拆分成数组
        String[] uriStrings=uriString.split(Constant.MULTIPLE_IMAGE_URI_SPLIT);
        //数组长度
        size=uriStrings.length;
        if(size>0){
            //字符串数组转为uri的list
            ArrayList<Uri> uris=new ArrayList<>();
            for(int i=0;i<uriStrings.length;i++){
                uris.add(Uri.parse(uriStrings[i]));
            }
            //多图片适配器
            MultiImageAdapter multiImageAdapter=new MultiImageAdapter(uris);
            //ViewPager设置适配器
            extendedViewPager.setAdapter(multiImageAdapter);
            //ViewPager添加页面改变监听器
            extendedViewPager.addOnPageChangeListener(new MyOnPageChangeListener(thumbImageContainer,activity,horizontalScrollView));
            //缩略图容器初始化
            thumbImageContainerInit(thumbImageContainer,uris,activity,extendedViewPager);
        }
        return size;
    }

    /**
     * 缩略图容器初始化方法
     * @param thumbImageContainer 缩略图容器
     * @param uris 图片uri
     * @param activity 上下文
     * @param viewPager 显示全图的viewPager
     */
    private void thumbImageContainerInit(LinearLayout thumbImageContainer, ArrayList<Uri> uris, final Activity activity,final ViewPager viewPager){
        //布局加载器
        LayoutInflater inflater=LayoutInflater.from(activity);
        //universal-image-loader框架，图片显示参数，参考于其官方Demo
        DisplayImageOptions thumbImageOptions=new DisplayImageOptions.Builder()
                .showImageOnLoading(R.drawable.loading)
                .showImageForEmptyUri(R.drawable.my_pic)
                .showImageOnFail(R.drawable.my_pic)
                .resetViewBeforeLoading(true)
                .cacheOnDisk(true)
                .imageScaleType(ImageScaleType.EXACTLY)
                .bitmapConfig(Bitmap.Config.RGB_565)
                .considerExifParams(true)
                .displayer(new FadeInBitmapDisplayer(300))
                .build();
        //加载缩略图
        for(int i=0;i<uris.size();i++){
            //单张缩略图布局
            View rootView= inflater.inflate(R.layout.thumb_image_view,null);
            //放缩略图的ImageView
            ImageView thumbImageView=(ImageView)rootView.findViewById(R.id.thumbImageView);
            //充当缩略图的边框，实际上是其父容器
            final LinearLayout border=(LinearLayout)rootView.findViewById(R.id.border);
            //为缩略图的父容器添加点击事件
            border.setOnClickListener(new View.OnClickListener(){
                @Override
                public void onClick(View v) {
                    if(v.getTag() instanceof Integer){
                        //ViewPager切换显示，被点击的缩略图的图片
                        viewPager.setCurrentItem((Integer)(v.getTag()));
                        //ViewPager显示图片的变化有两个来源，一是自身支持的滑动切换，
                        // 一是响应缩略图的点击事件，这里标明其图片变化的来源为响应点击事件
                        Common.comFromThumbImageView=true;
                    }
                }
            });
            //为border设置TAG，用以区分不同的缩略图
            border.setTag(i);
            //初始加载时，第一个缩略图为选中状态
            if(i==0){
                //设置选中状态
                border.setBackgroundColor(ContextCompat.getColor(activity,R.color.thumbImageSelectBackground));
                //记录当前选中的border
                Common.lastSelectedThumbImageViewBorder=border;
                //记录当前选中的位置
                Common.lastSelectedThumbImageViewPosition=0;
            }
            //调用universal-image-loader框架的方法
            ImageLoader.getInstance().displayImage(uris.get(i).toString(),thumbImageView,thumbImageOptions);
            //将缩略图添加到缩略图容器
            thumbImageContainer.addView(rootView);
        }
    }

    /**
     * 页面变化监听器
     */
    private class MyOnPageChangeListener implements ViewPager.OnPageChangeListener{
        //缩略图容器
        private final LinearLayout thumbImageContainer;
        //水平滚动控件
        private final HorizontalScrollView horizontalScrollView;
        //上下文
        private final Activity activity;

        /**
         * 构造器
         * @param thumbImageContainer 缩略图容器
         * @param activity 上下文
         * @param horizontalScrollView 水平滚动布局
         */
        public MyOnPageChangeListener(LinearLayout thumbImageContainer,Activity activity,HorizontalScrollView horizontalScrollView){
            this.thumbImageContainer=thumbImageContainer;
            this.activity=activity;
            this.horizontalScrollView=horizontalScrollView;
        }

        /**
         * 当页面被选中时触发
         * @param position 页面索引
         */
        @Override
        public void onPageSelected(int position) {
            //设置被选中的缩略图的背景，为选中色
            (((RelativeLayout) thumbImageContainer.getChildAt(position)).getChildAt(0)).setBackgroundColor(ContextCompat.getColor(activity,R.color.thumbImageSelectBackground));
            //如果上一个选中的缩略图不为空，则恢复其背景为默认色
            if(Common.lastSelectedThumbImageViewBorder!=null){
                Common.lastSelectedThumbImageViewBorder.setBackgroundColor(ContextCompat.getColor(activity,R.color.thumbImageDefaultBackground));
            }
            //如果页面更换是因ViewPager滑动触发，则水平滚动布局应同步滚动
            if(!Common.comFromThumbImageView){
                horizontalScrollView.smoothScrollBy((position-Common.lastSelectedThumbImageViewPosition)*(thumbImageContainer.getChildAt(position).getWidth()),0);
            }
            //替换上一次选中的缩略图，为当前缩略图
            Common.lastSelectedThumbImageViewBorder=(LinearLayout)((RelativeLayout) thumbImageContainer.getChildAt(position)).getChildAt(0);
            //替换上一次选中的缩略图索引，为当前缩略图索引
            Common.lastSelectedThumbImageViewPosition=position;
            //设置页面更换来源是缩略图为false
            Common.comFromThumbImageView=false;
        }
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}
        @Override
        public void onPageScrollStateChanged(int state) {}
    }
}
